package com.augurit.gzcgwsp.wfex.common.service;

import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;

import com.augurit.common.base.form.ResultForm;
import com.augurit.common.syscode.web.form.SysCodeForm;
import com.augurit.common.system.web.auth.form.LoginUserForm;
import com.augurit.gzcgwsp.ssgd.web.form.YwRqSsgdSqbForm;
import com.augurit.wf.bi.web.form.WfBusInstanceTaskForm;
import com.augurit.wf.common.entity.Jbpm4HistTask;


public interface IWfServiceEX{
	
	/**
     * 计算开始日期经过几个工作日后的日期
     */
    public Date calculateDueDate(Date startDate,Integer day);
    
	/**
     * 计算开始日期经过几个工作日后的日期
     */
    public Date calculateDueDate(Date startDate,String durationExpression);
        
    /**
     * 计算两个日期之间的工作日得天数
     */
    public Integer calculateBussinessDays(Date startDate,Date endDate);
    
    /**
     * 根据taskInstDbid获取流程时限的表达式
     * @param taskInstDbid
     * @return
     */
    public String getProcDueExpressIonByTaskInstDbid(Long taskInstDbid);
    
    /**
     * 根据taskInstDbid和activityName获取当前环节审批意见
     * @param taskInstDbid
     * @param names
     * @return
     */
    public List getHandleCommentsByTaskInstDbidAndActivityNames(Long taskInstDbid, String names);
    
    /**
	 * 根据【人员所属地区数字编码】和【角色编码】 获取人员
	 * 只能配一个，因为userIdList只拿一个；如果要配多个，就要拿多个，好像是用逗号隔开
	 * @param roleCode  角色编码
	 * @param areaCode  人员所属地区数字编码
	 * @return
	 */
	public String getUser(String roleCode,String areaCode);
	
	/**
	 * 
	 * @param id   用户id
	 * @param roleId   角色id，通过代码写定
	 * @return
	 */
	public String findBoPlaceCode(Long id, Long roleId);
	
	/**
     * 通过procInstId获取延期天数
     * @param procInstId
     * @return
     */
    public int getYqtsByProcInstId(String procInstId);
    
    /**
     * 保存延期天数
     * @param procInstId
     * @param yqts
     */
    public void saveBusNum1(String procInstId,int yqts);
    
    /**
     * 延期时，更新到期时间
     * @param procInstId
     * @param yqts 					延期天数
     * @param startDate 			收案日期
     * @param durationExpression	审批时限
     * @return
     */
    public Date updateProcessDutedateByProcInstIdAndYqts(String procInstId,int yqts,Date startDate,String durationExpression);
	
    /**
     * 通过受理号，从wf_bus_instance表查询延期天数
     * @param acceptNo
     * @return
     */
    public int getBusNum1(String acceptNo);
    
    /**
     * 根据id获取代理人
     * @param id
     * @return
     */
    public List getAgentNameById(long id);
    
    /**
     * 根据id获取Jbpm4HistTask
     * @param id
     * @return
     */
    public Jbpm4HistTask getJbpm4HistTaskById(long id);
    
    /**
	 * 根据延期和补正材料告知书算出结案时间
	 * @param procInstId
	 * @param yqts
	 * @param larq 
	 * @param durationExpression
	 * @param bjgzsj
	 * @return
	 */
	public Date getDfsjByYqtsAndBjgzsj(String procInstId,int yqts,Date larq,String durationExpression,Date bjgzsj,IWfServiceEX wfServiceEX);

	/**
	 * 获取历史意见
	 * @param execution 流程实例id
	 * @param activeName 环节名称
	 * @return
	 */
	public List<Jbpm4HistTask> contentByTaskId(String execution,
			String activeName);

	/**
	 * 查询补交数据
	 * @param templteCode
	 * @param masterEntityKey
	 * @return
	 */
	public boolean checkBjData(String templteCode, String masterEntityKey);
	
	/**
	 * 查询相应的业务表，判断bjslsj是否为空
	 * @param templateCode
	 * @param masterEntityKey
	 * @return
	 */
	public boolean checkBjslsjByTemplateCodeAndYwId(String templateCode, String masterEntityKey);
	
	/**
	 * 发送
	 * @param instance
	 */
    public ResultForm wfSend(WfBusInstanceTaskForm instance,LoginUserForm user);
  
    /**
     * 答复时间
     * @param templateCode 业务编码
     * @param id id
     * @return
     */
	public Date getDfsjByTempleteCode(String templateCode, Long id);
	
	/**
     * 启动公示
     * @param ywRqSsgdSqbForm
     * @return 
     * @throws Exception
     */
	public void startPublic(YwRqSsgdSqbForm ywRqSsgdSqbForm,Long taskInstDbid,WfBusInstanceTaskForm instance,LoginUserForm loginuserForm,Date endDate,String gssj) throws Exception;
	
	/**
     * 停止公示
     * @param acceptNo
     * @return 
     * @throws Exception
     */
	public void stopPublic(String acceptNo,String approvalNo) throws Exception;

	/**
	 * 计算工作日
	 * @param date
	 * @param procDuedate
	 * @return
	 */
	public int getWorkDays(Date date, Date procDuedate);
	
	/**
	 * 根据templateCode获取当前流程图的时间
	 * @param templateCode
	 * @return
	 */
	public String getDurationExpressionByTemplateCode(String templateCode);
	
	/**
	 * 根据templateCode获取templateName
	 * @param templateCode
	 * @return
	 */
	public String getSxmcByTemplateCode(String templateCode);
	
	/**
	 * 根据ItemCode和typeCode获取ItemName(ItemCode不能重复)
	 * @param ItemCode
	 * @param typeCode
	 * @return
	 */
	public SysCodeForm getItemNameByItemCodeAndTypeCode(String ItemCode,String typeCode);
	
	/**
	 * 根据key从property文件中获取value值
	 * @param localResource
	 * @param key
	 * @return
	 */
	public String getPropertiesValueByKey(ResourceBundle localResource,String key);
	
	/**
	 * 获取答复的期限
	 * @param id
	 * @param templateCode
	 * @return
	 */
	public Date getDfqx(Long id, String templateCode);
	
	/**
	 * 根据templateCode获取templateName
	 * @param templateCode
	 * @return
	 */
	public String getTemplateNameByTemplateCode(String templateCode);
}